package main

import (
	"fmt"
	"time"
)

const LIM = 50

// 缓存集合
var fibs [LIM]uint64

func main() {
	var result uint64 = 0
	start := time.Now()
	for i := 0; i < LIM; i++ {
		result = fibonacci(i)
		fmt.Printf("fibonacci(%d) is: %d\n", i, result)
	}
	end := time.Now()
	sub := end.Sub(start)
	fmt.Printf("longCalculation took this amount of time: %s\n", sub)
}

func fibonacci(n int) (res uint64) {
	// 先从缓存集合中获取。
	if fibs[n] != 0 {
		res = fibs[n]
		return
	}
	// 如果 n <= 1 说明是第一次！
	if n <= 1 {
		res = 1
	} else {
		// 获取当前数字的前两位数字。如 1,1,2,3,5
		// 公式：假如当前 n = 5，那么 n-1=3，n-2=2 。
		res = fibonacci(n-1) + fibonacci(n-2)
	}
	fibs[n] = res
	return
}
